package com.fatgirl.patterns.state.fsm
{
	import com.fatgirl.patterns.iterator.ICollection;

	/**
	 * 
	 * 有限状态接口
	 * @author iceman
	 * 
	 */
	public interface IFSMState extends ICollection
	{
		//-------------针对叶子元素的接口--------------------//
		/**
		 * 获取状态类型ID 
		 * @return 返回类型ID
		 * 
		 */
		function getType():int;
		/**
		 *  进入状态调用
		 * 
		 */
		function enter():void;
		
		/**
		 * 状态更新调用 
		 * 
		 */
		function update():void;
		/**
		 * 离开状态调用
		 * 
		 */
		function exit():void;	
		
		/**
		 * 状态初始化 
		 * 
		 */
		function init():void;
		
		/**
		 * 获取父状态 
		 * @return 
		 * 
		 */
		function getParent():IFSMState;
		/**
		 * 设置父状态 
		 * @param _parent
		 * 
		 */
		function setParent(_parent:IFSMState):void;
		
		//---------------------针对组合元素的接口----------------//

		/**
		 *  添加状态 
		 * @param _item
		 * 
		 */
		function addItem(_item:IFSMState):void;
		/**
		 * 进行状态变迁 
		 * @param _goal 变迁目标ID
		 * 
		 */
		function transitionState(_goal:int):void;
		/**
		 * 设置默认状态 
		 * @param _state 状态对象
		 * 
		 */
		function setDefaultState(_state:IFSMState):void;
		
		/**
		 * 获取默认状态 
		 * @return 
		 * 
		 */
		function getDefaultState():IFSMState;
		
	}
}